﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Data;

public partial class Archivo_SubirArchivo : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //-------------------------Lineas Agregadas para la seguridad----------------------------------------------------
        if (Session["nit"] != null)
            Response.Redirect("/SUEWebSite/Error.aspx");
        else if (Session["nomUsr"] != null)
        {
            List<String> Permisos = (List<String>)Session["Permisos"];
            if (!Permisos.Contains(System.IO.Path.GetFileName(HttpContext.Current.Request.FilePath)))
                Response.Redirect("/SUEWebSite/Error.aspx");
            if (Session["rolUsuario"].ToString() == "practicante")
                CrearSeguimiento(Session["nomUsr"].ToString(), Convert.ToInt32(Request.QueryString["idTarea"]));
        }
        else Response.Redirect("/SUEWebSite/Principal.aspx");
        //-------------------------Lineas Agregadas para la seguridad----------------------------------------------------
        
        CargarTarea(Convert.ToInt32(Request.QueryString["idTarea"]));
        BuscarArchivo();
    }

    /// <summary>
    /// Evento llamado al hacer click en el boton Subir. toma el archivo que se va a subir
    /// Se verifica que no haya otro archivo sistema en /Archivo/Formatos/NombreUsuario/idTarea, si lo hay 
    /// se elimina y se subo el actual.
    /// Se guarda el registro del arhcivo subido.
    /// Se guarda el registro en la base de datos
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>

    protected void ButtonSubirArchivo_Click1(object sender, EventArgs e)
    {
        if ((FileFormato.PostedFile != null) && (FileFormato.PostedFile.ContentLength > 0))
        {
            string ext = System.IO.Path.GetExtension(FileFormato.PostedFile.FileName);
            string archivoNombre = Session["nomUsr"].ToString() + Request.QueryString["idTarea"].ToString();
            string SaveLocation = Server.MapPath("Tareas") + "\\" + Session["nomUsr"].ToString() + "\\" + Request.QueryString["idTarea"].ToString() + "\\" + archivoNombre + ext ;
            
            try
            {
                BorrarArchivosDeTarea();
                FileFormato.PostedFile.SaveAs(SaveLocation);
               
                {
                    GestionarArchivos archivo = new GestionarArchivos();
                    archivo.SubirArchivo(archivoNombre);
                    LabelNotificacion.Text = "Archivo subido con éxito";
                }
            }
            catch
            {
                LabelNotificacion.Text = "No se pudo subir el archivo";
            }
            finally { BuscarArchivo(); }

        }
        else
            LabelNotificacion.Text = "Seleccione un archivo";
    }

    /// <summary>
    /// Metodo para crear en la base de datos el segumiento de una tarea, se crea cuando el usuario revisa
    /// la tarea por primera vez.
    /// Crea una carpeta con el nombre de usuario y otra dentro de esta con nombre del idTarea para ordenar las 
    /// tarea y los archivos que se suben.
    /// </summary>
    /// <param name="nombreUsuario"></param>
    /// <param name="idTarea"></param>

    private void CrearSeguimiento(string nombreUsuario, int idTarea)
    {
        GestionarTareas tareaSeg = new GestionarTareas();
        if (tareaSeg.CrearTareaSeguimiento(nombreUsuario, idTarea) == true)
        {
            DirectoryInfo DIR = new DirectoryInfo(Server.MapPath("Tareas") + "\\" + nombreUsuario + "\\" + idTarea + "\\");

            if (!DIR.Exists)
                 DIR.Create();
        }
    }

    /// <summary>
    /// Garga la informaciíon de la tarea seleccionada y la muestra en labels
    /// uno para el nombre de la tarea y otro con la descripción
    /// </summary>
    /// <param name="id">(int) El identificador de la tarea a cargar</param>

    private void CargarTarea(int id)
    {
        try
        {
            LabelNotificacion.Text = "Seleccionar archivo";
            GestionarTareas tarea = new GestionarTareas();
            DataTable dt = tarea.ConsultarTarea(id, "unica");
            LabelNombre.Text = dt.Rows[0]["nombre"].ToString();
            LabelDescripcion.Text = dt.Rows[0]["descripcion"].ToString();
        }
        catch
        {
            Response.Redirect("../Principal.aspx");
        }
    }

    /// <summary>
    /// Busca los archivos que se encuentran registrados en el sistema de tipo tareas
    /// Se busca en la carpeta del usuario y en la carpeta del identificador de la tarea
    /// se crea un DataTable con para obtener la información, y se se muestra 
    /// en el control Gridview1
    /// </summary>
       
    private void BuscarArchivo()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("NombreUsuario", typeof(string));
        dt.Columns.Add("idTarea", typeof(string));
        dt.Columns.Add("Archivo", typeof(string));
        dt.Columns.Add("Subido", typeof(string));
        string[] files = Directory.GetFiles(Server.MapPath("Tareas") + "\\" + Session["nomUsr"].ToString() + "\\" + Request.QueryString["idTarea"].ToString());
        if (files.Length > 0)
        {
            foreach (string file in files)
            {
                FileInfo finfo = new FileInfo(file);
                dt.Rows.Add(Session["nomUsr"].ToString(), Request.QueryString["idTarea"].ToString(), finfo.Name, finfo.CreationTime);
                
            }
                
        }
        GridView1.DataSource = dt;
        GridView1.DataBind();
    }

    /// <summary>
    /// Metodo llamado al subir un archivo para eliminar los archivos que existen en la carpeta nombreUsuario/idtTarea 
    /// para guardar solo el registro de un archivo relacionado a una tarea.
    /// </summary>

    private void BorrarArchivosDeTarea()
    {
        string[] files = Directory.GetFiles(Server.MapPath("Tareas") + "\\" + Session["nomUsr"].ToString() + "\\" + Request.QueryString["idTarea"].ToString());
        if (files.Length > 0)
        {
            foreach (string file in files)
                File.Delete(file);
        }
    }
}
